/**
 * Title:SysRoleMenuService<br>
 * Description:系统角色菜单服务类<br>
 * Copyright © Xiamen Dripstill  NetWorks Co.,Ltd.
 * @Create:2019-11-11<br>
 * @author:Sun Yijing<br>
 * @version: Object v1.0.0<br>
 * <br>
 * 修改历史:<br>
 * 修改人		修改日期		修改描述<br>
 * -----------------------------------<br>
 * <br>
 * <br>
 */
package com.yoooya.base.service.system;

import com.github.miemiedev.mybatis.paginator.domain.Order;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import com.yoooya.base.dao.system.SysRoleMenuMapper;
import com.yoooya.base.model.po.system.SysRoleMenuPo;
import com.yoooya.base.model.qo.system.SysRoleMenuQo;
import com.yoooya.base.utils.IdUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Service
@Transactional
public class SysRoleMenuService {
    @Autowired
    private SysRoleMenuMapper sysRoleMenuMapper;

    private static final Logger logger = LoggerFactory.getLogger(SysRoleMenuService.class);

    /**
     * 保存记录,不管记录里面的属性是否为空
     *
     * @param po 业务对象
     * @return 返回结束
     * @throws Exception
     */
    public Integer insert(SysRoleMenuPo po) throws Exception {
         po.setId(IdUtils.id());
         Date now = new Date();
         po.setCreateTime(now);
         po.setModifyTime(now);
        int result=this.sysRoleMenuMapper.insert(po);
        return result;
    }

    /**
     * 根据条件更新属性不为空的记录
     *
     * @param po 业务对象
     * @return 返回结果
     * @throws Exception
     */
    public Integer updateById(SysRoleMenuPo po) throws Exception {
        int result=this.sysRoleMenuMapper.updateById(po);
        return result;
    }

    /**
     * 根据ids批量修改记录
     *
     * @param ids 主键列表
     * @param po 业务对象
     * @return 返回True Or  Flase
     * @throws Exception
     */
    public boolean updateByBatch(String ids, SysRoleMenuPo po) throws Exception {
        this.sysRoleMenuMapper.updateByBatch(ids,po);
        return true;
    }

    /**
     * 根据主键删除记录
     *
     * @param id 主键ID
     * @return 返回结果
     * @throws Exception
     */
    public Integer deleteById(Long id) throws Exception {
        int result=this.sysRoleMenuMapper.deleteById(id);
        return result;
    }

    /**
     * 根据ids批量删除记录
     *
     * @param ids 主键列表
     * @return 返回True Or  Flase
     * @throws Exception
     */
    public boolean deleteByBatch(String ids) throws Exception {
        this.sysRoleMenuMapper.deleteByBatch(ids);
        return true;
    }

    /**
     * 根据主键查询记录
     *
     * @param qo 条件查询对象
     * @return 返回统计结果
     * @throws Exception
     */
    public int count(SysRoleMenuQo qo) throws Exception {
        int count = this.sysRoleMenuMapper.count(qo);
        logger.debug("count: {}", count);
        return count;
    }

    /**
     * 根据主键查询记录
     *
     * @param id 主键
     * @return 返回业务对象
     * @throws Exception
     */
    public SysRoleMenuPo queryById(Long id) throws Exception {
        SysRoleMenuPo record= this.sysRoleMenuMapper.queryById(id);
        return record;
    }

    /**
     * 根据条件分页查询记录集-组件分页
     *
     * @param qo 条件查询对象
     * @return 返回业务对象列表
     * @throws Exception
     */
    public List<SysRoleMenuPo> query(SysRoleMenuQo qo) throws Exception {
        PageBounds pbs = new PageBounds(qo.getPageNumber(), qo.getPageSize(),Order.formString("createTime.desc"));
        PageList<SysRoleMenuPo> records = (PageList<SysRoleMenuPo>) this.sysRoleMenuMapper.query(qo,pbs);
        for(SysRoleMenuPo record:records){
             }
            return records;
        }

    /**
     * 根据条件查询所有简单记录集
     *
     * @param qo 条件查询对象
     * @return 返回业务对象列表
     * @throws Exception
     */
    public List<SysRoleMenuPo> queryByAll(SysRoleMenuQo qo) throws Exception {
        List<SysRoleMenuPo> records =  this.sysRoleMenuMapper.query(qo);
        for(SysRoleMenuPo record:records){
             }
            return records;
        }

    /**
     * 批量修改状态
     *
     * @param ids 主键列表
     * @param status 
     * @return 返回True Or  Flase
     * @throws Exception
     */
    public boolean updateStatusByBatch(String ids, Integer status) throws Exception {
        this.sysRoleMenuMapper.updateStatusByBatch(ids,status);
        return true;
    }

    public int saveSysRoleMenu(SysRoleMenuPo po) throws Exception{
        int result = 0;
        String menuIds = po.getMenuIds();
        Long roleId = po.getRoleId();
        if(po.getId()==null){
            result = sysRoleMenuMapper.deleteByRoleId(roleId);
            po.setId(IdUtils.id());
        }
        if(menuIds==null || "".equals(menuIds)){
            return result;
        }
        String menuIdArr[] = menuIds.split(",");
        Date now = new Date();
        List<SysRoleMenuPo> sysRoleMenuList = new ArrayList<SysRoleMenuPo>();
        for(String menuId:menuIdArr){
            if(menuId==null || "".equals(menuId)){
               continue;
            }
            SysRoleMenuPo rec = new SysRoleMenuPo();
            rec.setId(IdUtils.id());
            rec.setRoleId(roleId);
            rec.setMenuId(Long.parseLong(menuId));
            rec.setStatus(1);
            rec.setModifyTime(now);
            rec.setCreateTime(now);
            sysRoleMenuList.add(rec);
        }
        if(sysRoleMenuList!=null &&sysRoleMenuList.size()>0){
            result+=sysRoleMenuMapper.insertByBatch(sysRoleMenuList);
        }

        return result;
    }
}